home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 July / EnigmA AMIGA RUN 20 (1997)(G.R. Edizioni)(IT)[!][issue 1997-07 & 08][EAR-CD IV].iso / earcd / docs / mags / f0nt02.lha / N騷zMeg! / startup.s < prev    next >
Text File  |  1995-04-11  |  3KB  |  91 lines

  1. ; A CLI vagy Shell-bõl indított programok A0-ban kapnak egy mutatót a
  2. ; paraméter string-re, amely egy 10-es értékû byte-al van lezárva. D0-ban a
  3. ; string hossza található. A paraméterek kiértékelésére viszont ajánlatosabb
  4. ; a Dos/ReadArgs rutint használni és ezt a két regisztert béken hagyni. Én
  5. ; itt mindenesetre elmentem õket, hogy megmaradjon a tartalmuk, ha esetleg
  6. ; késõbb szükség lenne rájuk.
  7.  
  8. Start                   MOVEM.L D0/A0,-(SP)
  9.  
  10. ; Az exec.library báziscímének kiolvasása, mivel Exec rutinokat fogunk
  11. ; használni.
  12.  
  13.                         MOVE.L  (4).W,A6
  14.  
  15. ; Megkeressük a mutatót a Task struktúránkra, amely valójában egy Process
  16. ; struktúra.
  17.  
  18.                         SUB.L   A1,A1
  19.                         JSR     (_LVOFindTask,A6)
  20.                         MOVE.L  D0,A5
  21.  
  22. ; Itt nézzük meg, hogy a programunk a CLI-bõl vagy a Workbench-rõl lett-e
  23. ; indítva. Ha pr_CLI nulla, akkor ikonnal indultunk, másképpen a CLI-bõl.
  24.  
  25.                         TST.L   (pr_CLI,A5)
  26.                         BNE     .1
  27.  
  28. ; Várunk, míg megérkezik a WBStartup nevû message a process-ünk port-jára.
  29.  
  30.                         LEA     (pr_MsgPort,A5),A0
  31.                         JSR     (_LVOWaitPort,A6)
  32.  
  33. ; Megjött a WBStartup message és eltávolítjuk a port-ról. Ebbõl lehet
  34. ; megtudni, hogy milyen más ikonok voltak kiválasztva a miénkkel együtt és
  35. ; ennek a segítségével kaphatjuk meg az ikonok tooltype-jait is.
  36.  
  37.                         LEA     (pr_MsgPort,A5),A0
  38.                         JSR     (_LVOGetMsg,A6)
  39.                         MOVE.L  D0,(WBStartupAddress)
  40.  
  41. ; A paraméter regiszterek eredeti tartalmának helyreállítása, hogy a
  42. ; fõprogramban esetleg ki lehessen értékelni õket.
  43.  
  44. .1                      MOVEM.L (SP)+,D0/A0
  45.  
  46. ; Itt hívjuk meg a fõprogramot, amely ha szükséges, akkor a WBStartupAddress
  47. ; kiolvasásával megtudhatja, hogy CLI-bõl vagy Workbench-rõl indult-e.
  48.  
  49.                         BSR     Main
  50.  
  51. ; A CLI-s programok a D0-ás regiszterben szoktak egy hibakódot visszaadni,
  52. ; amelyet most gyorsan elmentünk. Ez a szám általában 0, 5, 10 vagy 20
  53. ; szokott lenni, a hiba súlyosságától függõen. A 0 azt jelenti, hogy nem
  54. ; történt semmi hiba.
  55.  
  56.                         MOVEM.L D0,-(SP)
  57.  
  58. ; Megnézzük, hogy a program eredetileg a CLI-bõl vagy a Workbench-rõl lett-e
  59. ; indítva.
  60.  
  61.                         MOVE.L  (WBStartupAddress,PC),D0
  62.                         BEQ     .2
  63.  
  64. ; A multitasking-ot le kell tiltani, mielõtt válaszolunk a WBStartup
  65. ; message-re, mert ahogy a Workbench megkapja a választ, rögtön
  66. ; felszabadítja a programunk által foglalt memóriát. Mi ekkor akár felül
  67. ; is íródhatunk egy másik program által, amely azonnal lefoglalja és
  68. ; feltölti adatokkal a valaha saját memóriánkat.
  69.  
  70.                         JSR     (_LVOForbid,A6)
  71.  
  72. ; A WBStarup message visszaküldése a Workbench-hez. Mindig a program
  73. ; legvégén kell végrehajtani, természetesen egy Forbid után.
  74.  
  75.                         MOVE.L  (WBStartupAddress,PC),A1
  76.                         JSR     (_LVOReplyMsg,A6)
  77.  
  78. ; A CLI-hez küldendõ hibakód visszahozása.
  79.  
  80. .2                      MOVEM.L (SP)+,D0
  81.  
  82. ; Sajnos itt vége is van a rutinnak.
  83.  
  84.                         RTS
  85.  
  86. ; Itt található a WBStartup message címe, ha a Workbench-rõl indultunk,
  87. ; amúgy meg nulla.
  88.  
  89. WBStartupAddress        DC.L    0
  90.  
  91.